<!doctype html>
<html lang="zh-CN" data-theme="light">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1" />
    <meta name="generator" content="VuePress 2.0.0-beta.68" />
    <meta name="theme" content="VuePress Theme Hope 2.0.0-beta.250" />
    <style>
      html {
        background: #fff;
      }

      html[data-theme="dark"] {
        background: #1d1e1f;
      }

      body {
        background: var(--bg-color);
      }
    </style>
    <script>
      const userMode = localStorage.getItem("vuepress-theme-hope-scheme");
      const systemDarkMode =
        window.matchMedia &&
        window.matchMedia("(prefers-color-scheme: dark)").matches;

      if (userMode === "dark" || (userMode !== "light" && systemDarkMode)) {
        document.documentElement.setAttribute("data-theme", "dark");
      }
    </script>
    <meta name="referrer" content="no-referrer"><link rel="icon" href="https://gitee.com/eddie-lucas/images/raw/master/img/logo.jpg"><link rel="icon" href="https://gitee.com/eddie-lucas/images/raw/master/img/logo.png" type="image/png" sizes="512x512"><link rel="icon" href="https://gitee.com/eddie-lucas/images/raw/master/img/logo.png" type="image/png" sizes="192x192"><link rel="manifest" href="/manifest.webmanifest" crossorigin="use-credentials"><meta name="theme-color" content="#46bd87"><link rel="apple-touch-icon" href="https://gitee.com/eddie-lucas/images/raw/master/img/logo.png"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><meta name="msapplication-TileImage" content="https://gitee.com/eddie-lucas/images/raw/master/img/logo.png"><meta name="msapplication-TileColor" content="#ffffff"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover"><title>内存淘汰策略 | 小刘Learning</title><meta name="description" content="">
    <link rel="preload" href="/assets/style-3ede7958.css" as="style"><link rel="stylesheet" href="/assets/style-3ede7958.css">
    <link rel="modulepreload" href="/assets/app-d83e1369.js"><link rel="modulepreload" href="/assets/内存淘汰策略.html-2108cb44.js"><link rel="modulepreload" href="/assets/内存淘汰策略.html-58163b51.js"><link rel="modulepreload" href="/assets/plugin-vue_export-helper-c27b6911.js">
    <link rel="prefetch" href="/assets/aboutMe.html-72f014c7.js" as="script"><link rel="prefetch" href="/assets/index.html-69cd5f22.js" as="script"><link rel="prefetch" href="/assets/Java集合.html-f6d1e995.js" as="script"><link rel="prefetch" href="/assets/MyBatis常见问题.html-3782c8f7.js" as="script"><link rel="prefetch" href="/assets/InnoDB的Buffer Pool.html-f0ae2755.js" as="script"><link rel="prefetch" href="/assets/InnoDB的行格式和页结构.html-31890643.js" as="script"><link rel="prefetch" href="/assets/MySQL中的各种锁.html-b819061d.js" as="script"><link rel="prefetch" href="/assets/MySQL中的排序.html-5442bdf2.js" as="script"><link rel="prefetch" href="/assets/MySQL事务与MVCC.html-11dea9ac.js" as="script"><link rel="prefetch" href="/assets/MySQL优化器原理.html-44cdf1f3.js" as="script"><link rel="prefetch" href="/assets/5种IO模型.html-623f6d24.js" as="script"><link rel="prefetch" href="/assets/Netty的线程模型.html-1933240c.js" as="script"><link rel="prefetch" href="/assets/粘包拆包问题.html-e5c58280.js" as="script"><link rel="prefetch" href="/assets/AOF和RDB持久化.html-de83ad53.js" as="script"><link rel="prefetch" href="/assets/Gossip协议.html-9cc1d704.js" as="script"><link rel="prefetch" href="/assets/Redisson看门狗机制.html-8e4e6651.js" as="script"><link rel="prefetch" href="/assets/主从复制原理.html-5692886d.js" as="script"><link rel="prefetch" href="/assets/缓存击穿、穿透、雪崩.html-d043509c.js" as="script"><link rel="prefetch" href="/assets/过期键的删除策略.html-86aae1a3.js" as="script"><link rel="prefetch" href="/assets/NameServer.html-6a201ec6.js" as="script"><link rel="prefetch" href="/assets/消息发送.html-4164a815.js" as="script"><link rel="prefetch" href="/assets/消息持久化.html-ad4aec32.js" as="script"><link rel="prefetch" href="/assets/Spring4.3.x源码阅读.html-ce67a2f8.js" as="script"><link rel="prefetch" href="/assets/过滤器和拦截器的区别.html-c5dbe180.js" as="script"><link rel="prefetch" href="/assets/MySQL安装.html-ce91cf4e.js" as="script"><link rel="prefetch" href="/assets/nvm_node安装.html-c02c4943.js" as="script"><link rel="prefetch" href="/assets/xxl-job源码阅读.html-4a3b4336.js" as="script"><link rel="prefetch" href="/assets/算法补充题.html-82552fdf.js" as="script"><link rel="prefetch" href="/assets/转换函数.html-4e846421.js" as="script"><link rel="prefetch" href="/assets/分布式事务.html-4015f1f4.js" as="script"><link rel="prefetch" href="/assets/深入理解Java虚拟机.html-f58d9b73.js" as="script"><link rel="prefetch" href="/assets/Redis开发与运维.html-8fbbb19d.js" as="script"><link rel="prefetch" href="/assets/Redis设计与实现.html-3d2f28fe.js" as="script"><link rel="prefetch" href="/assets/中级开发（5年内） .html-fe02712d.js" as="script"><link rel="prefetch" href="/assets/初级开发（3年内）.html-669c578d.js" as="script"><link rel="prefetch" href="/assets/高级开发（8年内）.html-8e45d1a0.js" as="script"><link rel="prefetch" href="/assets/apache poi导致的oom.html-ac4f4186.js" as="script"><link rel="prefetch" href="/assets/Spring启动及扫描流程.html-dca86884.js" as="script"><link rel="prefetch" href="/assets/404.html-81a48005.js" as="script"><link rel="prefetch" href="/assets/index.html-2b6ad090.js" as="script"><link rel="prefetch" href="/assets/index.html-30245415.js" as="script"><link rel="prefetch" href="/assets/index.html-c2c088b3.js" as="script"><link rel="prefetch" href="/assets/index.html-f512ec67.js" as="script"><link rel="prefetch" href="/assets/index.html-e1891597.js" as="script"><link rel="prefetch" href="/assets/index.html-b77929dc.js" as="script"><link rel="prefetch" href="/assets/index.html-3e3e3234.js" as="script"><link rel="prefetch" href="/assets/index.html-db16fd88.js" as="script"><link rel="prefetch" href="/assets/index.html-02e59ce2.js" as="script"><link rel="prefetch" href="/assets/index.html-55c7e4fd.js" as="script"><link rel="prefetch" href="/assets/index.html-3b089dfb.js" as="script"><link rel="prefetch" href="/assets/index.html-ac5b8d61.js" as="script"><link rel="prefetch" href="/assets/index.html-a2f3ea26.js" as="script"><link rel="prefetch" href="/assets/index.html-b57e51cb.js" as="script"><link rel="prefetch" href="/assets/index.html-0c321714.js" as="script"><link rel="prefetch" href="/assets/index.html-6266e407.js" as="script"><link rel="prefetch" href="/assets/index.html-00f53358.js" as="script"><link rel="prefetch" href="/assets/index.html-7b46e405.js" as="script"><link rel="prefetch" href="/assets/index.html-219b1b1f.js" as="script"><link rel="prefetch" href="/assets/index.html-ecf569c4.js" as="script"><link rel="prefetch" href="/assets/aboutMe.html-a5377517.js" as="script"><link rel="prefetch" href="/assets/index.html-df94614a.js" as="script"><link rel="prefetch" href="/assets/Java集合.html-25980358.js" as="script"><link rel="prefetch" href="/assets/MyBatis常见问题.html-13559d56.js" as="script"><link rel="prefetch" href="/assets/InnoDB的Buffer Pool.html-2608d2bb.js" as="script"><link rel="prefetch" href="/assets/InnoDB的行格式和页结构.html-b66829d8.js" as="script"><link rel="prefetch" href="/assets/MySQL中的各种锁.html-eda1f1e8.js" as="script"><link rel="prefetch" href="/assets/MySQL中的排序.html-155835e9.js" as="script"><link rel="prefetch" href="/assets/MySQL事务与MVCC.html-5203098d.js" as="script"><link rel="prefetch" href="/assets/MySQL优化器原理.html-580192b8.js" as="script"><link rel="prefetch" href="/assets/5种IO模型.html-e14d32e5.js" as="script"><link rel="prefetch" href="/assets/Netty的线程模型.html-79ec3f0d.js" as="script"><link rel="prefetch" href="/assets/粘包拆包问题.html-ad117100.js" as="script"><link rel="prefetch" href="/assets/AOF和RDB持久化.html-8f530297.js" as="script"><link rel="prefetch" href="/assets/Gossip协议.html-68ce5f80.js" as="script"><link rel="prefetch" href="/assets/Redisson看门狗机制.html-f806e761.js" as="script"><link rel="prefetch" href="/assets/主从复制原理.html-c35d3468.js" as="script"><link rel="prefetch" href="/assets/缓存击穿、穿透、雪崩.html-d8d78972.js" as="script"><link rel="prefetch" href="/assets/过期键的删除策略.html-b2be5f51.js" as="script"><link rel="prefetch" href="/assets/NameServer.html-6ada07a1.js" as="script"><link rel="prefetch" href="/assets/消息发送.html-08920331.js" as="script"><link rel="prefetch" href="/assets/消息持久化.html-32746c2c.js" as="script"><link rel="prefetch" href="/assets/Spring4.3.x源码阅读.html-3475e320.js" as="script"><link rel="prefetch" href="/assets/过滤器和拦截器的区别.html-56c13477.js" as="script"><link rel="prefetch" href="/assets/MySQL安装.html-c7803a3a.js" as="script"><link rel="prefetch" href="/assets/nvm_node安装.html-736601b9.js" as="script"><link rel="prefetch" href="/assets/xxl-job源码阅读.html-2b98669d.js" as="script"><link rel="prefetch" href="/assets/算法补充题.html-37debf9d.js" as="script"><link rel="prefetch" href="/assets/转换函数.html-44dfb333.js" as="script"><link rel="prefetch" href="/assets/分布式事务.html-e6634dbe.js" as="script"><link rel="prefetch" href="/assets/深入理解Java虚拟机.html-3810cea1.js" as="script"><link rel="prefetch" href="/assets/Redis开发与运维.html-76744132.js" as="script"><link rel="prefetch" href="/assets/Redis设计与实现.html-eccc56a7.js" as="script"><link rel="prefetch" href="/assets/中级开发（5年内） .html-a2fc4d16.js" as="script"><link rel="prefetch" href="/assets/初级开发（3年内）.html-e48a4104.js" as="script"><link rel="prefetch" href="/assets/高级开发（8年内）.html-9138cbdd.js" as="script"><link rel="prefetch" href="/assets/apache poi导致的oom.html-b39dacda.js" as="script"><link rel="prefetch" href="/assets/Spring启动及扫描流程.html-0b604fff.js" as="script"><link rel="prefetch" href="/assets/404.html-742f0851.js" as="script"><link rel="prefetch" href="/assets/index.html-160c66d3.js" as="script"><link rel="prefetch" href="/assets/index.html-bb7b1e80.js" as="script"><link rel="prefetch" href="/assets/index.html-116fe317.js" as="script"><link rel="prefetch" href="/assets/index.html-17f24df8.js" as="script"><link rel="prefetch" href="/assets/index.html-3fe5d15e.js" as="script"><link rel="prefetch" href="/assets/index.html-c894bb5e.js" as="script"><link rel="prefetch" href="/assets/index.html-25b31507.js" as="script"><link rel="prefetch" href="/assets/index.html-8bb87106.js" as="script"><link rel="prefetch" href="/assets/index.html-255fc5d5.js" as="script"><link rel="prefetch" href="/assets/index.html-373a73ca.js" as="script"><link rel="prefetch" href="/assets/index.html-d539e1a9.js" as="script"><link rel="prefetch" href="/assets/index.html-1475787c.js" as="script"><link rel="prefetch" href="/assets/index.html-8073adbe.js" as="script"><link rel="prefetch" href="/assets/index.html-2ff9332c.js" as="script"><link rel="prefetch" href="/assets/index.html-f14ceb6a.js" as="script"><link rel="prefetch" href="/assets/index.html-54082429.js" as="script"><link rel="prefetch" href="/assets/index.html-264a3de2.js" as="script"><link rel="prefetch" href="/assets/index.html-fb62746d.js" as="script"><link rel="prefetch" href="/assets/index.html-81d28dad.js" as="script"><link rel="prefetch" href="/assets/index.html-56062662.js" as="script"><link rel="prefetch" href="/assets/giscus-0b7adcf8.js" as="script"><link rel="prefetch" href="/assets/photoswipe.esm-1464cdb9.js" as="script"><link rel="prefetch" href="/assets/index-e32a7948.js" as="script">
  </head>
  <body>
    <div id="app"><!--[--><!--[--><!--[--><span tabindex="-1"></span><a href="#main-content" class="vp-skip-link sr-only">跳至主要內容</a><!--]--><!--[--><div class="theme-container has-toc"><!--[--><header id="navbar" class="vp-navbar"><div class="vp-navbar-start"><button type="button" class="vp-toggle-sidebar-button" title="Toggle Sidebar"><span class="icon"></span></button><!--[--><!----><!--]--><!--[--><a class="vp-link vp-brand vp-brand" href="/"><img class="vp-nav-logo" src="https://gitee.com/eddie-lucas/images/raw/master/img/logo.svg" alt="小刘Learning"><!----><span class="vp-site-name hide-in-pad">小刘Learning</span></a><!--]--><!--[--><!----><!--]--></div><div class="vp-navbar-center"><!--[--><!----><!--]--><!--[--><nav class="vp-nav-links"><div class="nav-item hide-in-mobile"><a aria-label="首页" class="vp-link nav-link nav-link" href="/"><span class="font-icon icon iconfont icon-shouye" style=""></span>首页<!----></a></div><div class="nav-item hide-in-mobile"><a aria-label="后端技术" class="vp-link nav-link nav-link" href="/backend/mysql/MySQL%E4%BA%8B%E5%8A%A1%E4%B8%8EMVCC.html"><span class="font-icon icon iconfont icon-xingqiu" style=""></span>后端技术<!----></a></div><div class="nav-item hide-in-mobile"><a aria-label="读书笔记" class="vp-link nav-link nav-link" href="/readNote/redis/Redis%E5%BC%80%E5%8F%91%E4%B8%8E%E8%BF%90%E7%BB%B4.html"><span class="font-icon icon iconfont icon-book" style=""></span>读书笔记<!----></a></div></nav><!--]--><!--[--><!----><!--]--></div><div class="vp-navbar-end"><!--[--><!----><!--]--><!--[--><!----><div class="nav-item vp-repo"><a class="vp-repo-link" href="https://github.com/eddie-lucas" target="_blank" rel="noopener noreferrer" aria-label="GitHub"><svg xmlns="http://www.w3.org/2000/svg" class="icon github-icon" viewBox="0 0 1024 1024" fill="currentColor" aria-label="github icon" style="width:1.25rem;height:1.25rem;vertical-align:middle;"><path d="M511.957 21.333C241.024 21.333 21.333 240.981 21.333 512c0 216.832 140.544 400.725 335.574 465.664 24.49 4.395 32.256-10.07 32.256-23.083 0-11.69.256-44.245 0-85.205-136.448 29.61-164.736-64.64-164.736-64.64-22.315-56.704-54.4-71.765-54.4-71.765-44.587-30.464 3.285-29.824 3.285-29.824 49.195 3.413 75.179 50.517 75.179 50.517 43.776 75.008 114.816 53.333 142.762 40.79 4.523-31.66 17.152-53.377 31.19-65.537-108.971-12.458-223.488-54.485-223.488-242.602 0-53.547 19.114-97.323 50.517-131.67-5.035-12.33-21.93-62.293 4.779-129.834 0 0 41.258-13.184 134.912 50.346a469.803 469.803 0 0 1 122.88-16.554c41.642.213 83.626 5.632 122.88 16.554 93.653-63.488 134.784-50.346 134.784-50.346 26.752 67.541 9.898 117.504 4.864 129.834 31.402 34.347 50.474 78.123 50.474 131.67 0 188.586-114.73 230.016-224.042 242.09 17.578 15.232 33.578 44.672 33.578 90.454v135.85c0 13.142 7.936 27.606 32.854 22.87C862.25 912.597 1002.667 728.747 1002.667 512c0-271.019-219.648-490.667-490.71-490.667z"></path></svg></a></div><div class="nav-item hide-in-mobile"><button type="button" id="appearance-switch"><svg xmlns="http://www.w3.org/2000/svg" class="icon auto-icon" viewBox="0 0 1024 1024" fill="currentColor" aria-label="auto icon" style="display:block;"><path d="M512 992C246.92 992 32 777.08 32 512S246.92 32 512 32s480 214.92 480 480-214.92 480-480 480zm0-840c-198.78 0-360 161.22-360 360 0 198.84 161.22 360 360 360s360-161.16 360-360c0-198.78-161.22-360-360-360zm0 660V212c165.72 0 300 134.34 300 300 0 165.72-134.28 300-300 300z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" class="icon dark-icon" viewBox="0 0 1024 1024" fill="currentColor" aria-label="dark icon" style="display:none;"><path d="M524.8 938.667h-4.267a439.893 439.893 0 0 1-313.173-134.4 446.293 446.293 0 0 1-11.093-597.334A432.213 432.213 0 0 1 366.933 90.027a42.667 42.667 0 0 1 45.227 9.386 42.667 42.667 0 0 1 10.24 42.667 358.4 358.4 0 0 0 82.773 375.893 361.387 361.387 0 0 0 376.747 82.774 42.667 42.667 0 0 1 54.187 55.04 433.493 433.493 0 0 1-99.84 154.88 438.613 438.613 0 0 1-311.467 128z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" class="icon light-icon" viewBox="0 0 1024 1024" fill="currentColor" aria-label="light icon" style="display:none;"><path d="M952 552h-80a40 40 0 0 1 0-80h80a40 40 0 0 1 0 80zM801.88 280.08a41 41 0 0 1-57.96-57.96l57.96-58a41.04 41.04 0 0 1 58 58l-58 57.96zM512 752a240 240 0 1 1 0-480 240 240 0 0 1 0 480zm0-560a40 40 0 0 1-40-40V72a40 40 0 0 1 80 0v80a40 40 0 0 1-40 40zm-289.88 88.08-58-57.96a41.04 41.04 0 0 1 58-58l57.96 58a41 41 0 0 1-57.96 57.96zM192 512a40 40 0 0 1-40 40H72a40 40 0 0 1 0-80h80a40 40 0 0 1 40 40zm30.12 231.92a41 41 0 0 1 57.96 57.96l-57.96 58a41.04 41.04 0 0 1-58-58l58-57.96zM512 832a40 40 0 0 1 40 40v80a40 40 0 0 1-80 0v-80a40 40 0 0 1 40-40zm289.88-88.08 58 57.96a41.04 41.04 0 0 1-58 58l-57.96-58a41 41 0 0 1 57.96-57.96z"></path></svg></button></div><!----><!--]--><!--[--><!----><!--]--><button type="button" class="vp-toggle-navbar-button" aria-label="Toggle Navbar" aria-expanded="false" aria-controls="nav-screen"><span><span class="vp-top"></span><span class="vp-middle"></span><span class="vp-bottom"></span></span></button></div></header><!----><!--]--><!----><div class="toggle-sidebar-wrapper"><span class="arrow start"></span></div><aside id="sidebar" class="vp-sidebar"><!--[--><!----><!--]--><ul class="vp-sidebar-links"><li><section class="vp-sidebar-group"><button class="vp-sidebar-heading clickable" type="button"><span class="font-icon icon iconfont icon-MySQL" style=""></span><span class="vp-sidebar-title">MySQL</span><span class="vp-arrow end"></span></button><!----></section></li><li><section class="vp-sidebar-group"><button class="vp-sidebar-heading clickable active" type="button"><span class="font-icon icon iconfont icon-redis" style=""></span><span class="vp-sidebar-title">Redis</span><span class="vp-arrow down"></span></button><ul class="vp-sidebar-links"><li><!--[--><a aria-label="AOF和RDB持久化" class="vp-link nav-link vp-sidebar-link vp-sidebar-page nav-link vp-sidebar-link vp-sidebar-page" href="/backend/redis/AOF%E5%92%8CRDB%E6%8C%81%E4%B9%85%E5%8C%96.html"><!---->AOF和RDB持久化<!----></a><ul class="vp-sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a aria-label="过期键的删除策略" class="vp-link nav-link vp-sidebar-link vp-sidebar-page nav-link vp-sidebar-link vp-sidebar-page" href="/backend/redis/%E8%BF%87%E6%9C%9F%E9%94%AE%E7%9A%84%E5%88%A0%E9%99%A4%E7%AD%96%E7%95%A5.html"><!---->过期键的删除策略<!----></a><ul class="vp-sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a aria-label="缓存击穿、穿透、雪崩" class="vp-link nav-link vp-sidebar-link vp-sidebar-page nav-link vp-sidebar-link vp-sidebar-page" href="/backend/redis/%E7%BC%93%E5%AD%98%E5%87%BB%E7%A9%BF%E3%80%81%E7%A9%BF%E9%80%8F%E3%80%81%E9%9B%AA%E5%B4%A9.html"><!---->缓存击穿、穿透、雪崩<!----></a><ul class="vp-sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a aria-label="Redisson看门狗机制" class="vp-link nav-link vp-sidebar-link vp-sidebar-page nav-link vp-sidebar-link vp-sidebar-page" href="/backend/redis/Redisson%E7%9C%8B%E9%97%A8%E7%8B%97%E6%9C%BA%E5%88%B6.html"><!---->Redisson看门狗机制<!----></a><ul class="vp-sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a aria-label="主从复制原理" class="vp-link nav-link vp-sidebar-link vp-sidebar-page nav-link vp-sidebar-link vp-sidebar-page" href="/backend/redis/%E4%B8%BB%E4%BB%8E%E5%A4%8D%E5%88%B6%E5%8E%9F%E7%90%86.html"><!---->主从复制原理<!----></a><ul class="vp-sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a aria-label="内存淘汰策略" class="vp-link nav-link active vp-sidebar-link vp-sidebar-page active nav-link active vp-sidebar-link vp-sidebar-page active" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html"><!---->内存淘汰策略<!----></a><ul class="vp-sidebar-sub-headers"><li class="vp-sidebar-sub-header"><a aria-label="概述" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#概述"><!---->概述<!----></a><ul class="vp-sidebar-sub-headers"></ul></li><li class="vp-sidebar-sub-header"><a aria-label="noeviction" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#noeviction"><!---->noeviction<!----></a><ul class="vp-sidebar-sub-headers"><li class="vp-sidebar-sub-header"><a aria-label="适用场景" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#适用场景"><!---->适用场景<!----></a><ul class="vp-sidebar-sub-headers"></ul></li><li class="vp-sidebar-sub-header"><a aria-label="怎么用" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#怎么用"><!---->怎么用<!----></a><ul class="vp-sidebar-sub-headers"></ul></li><li class="vp-sidebar-sub-header"><a aria-label="小结" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#小结"><!---->小结<!----></a><ul class="vp-sidebar-sub-headers"></ul></li><li class="vp-sidebar-sub-header"><a aria-label="注意事项" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#注意事项"><!---->注意事项<!----></a><ul class="vp-sidebar-sub-headers"></ul></li></ul></li><li class="vp-sidebar-sub-header"><a aria-label="allkeys-lru" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#allkeys-lru"><!---->allkeys-lru<!----></a><ul class="vp-sidebar-sub-headers"><li class="vp-sidebar-sub-header"><a aria-label="适用场景" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#适用场景-1"><!---->适用场景<!----></a><ul class="vp-sidebar-sub-headers"></ul></li><li class="vp-sidebar-sub-header"><a aria-label="怎么用" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#怎么用-1"><!---->怎么用<!----></a><ul class="vp-sidebar-sub-headers"></ul></li><li class="vp-sidebar-sub-header"><a aria-label="小结" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#小结-1"><!---->小结<!----></a><ul class="vp-sidebar-sub-headers"></ul></li><li class="vp-sidebar-sub-header"><a aria-label="注意事项" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#注意事项-1"><!---->注意事项<!----></a><ul class="vp-sidebar-sub-headers"></ul></li></ul></li><li class="vp-sidebar-sub-header"><a aria-label="allkeys-lfu" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#allkeys-lfu"><!---->allkeys-lfu<!----></a><ul class="vp-sidebar-sub-headers"><li class="vp-sidebar-sub-header"><a aria-label="适用场景" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#适用场景-2"><!---->适用场景<!----></a><ul class="vp-sidebar-sub-headers"></ul></li><li class="vp-sidebar-sub-header"><a aria-label="怎么用" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#怎么用-2"><!---->怎么用<!----></a><ul class="vp-sidebar-sub-headers"></ul></li><li class="vp-sidebar-sub-header"><a aria-label="小结" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#小结-2"><!---->小结<!----></a><ul class="vp-sidebar-sub-headers"></ul></li><li class="vp-sidebar-sub-header"><a aria-label="注意事项" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#注意事项-2"><!---->注意事项<!----></a><ul class="vp-sidebar-sub-headers"></ul></li></ul></li><li class="vp-sidebar-sub-header"><a aria-label="volatile-lru" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#volatile-lru"><!---->volatile-lru<!----></a><ul class="vp-sidebar-sub-headers"><li class="vp-sidebar-sub-header"><a aria-label="适用场景" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#适用场景-3"><!---->适用场景<!----></a><ul class="vp-sidebar-sub-headers"></ul></li><li class="vp-sidebar-sub-header"><a aria-label="怎么用" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#怎么用-3"><!---->怎么用<!----></a><ul class="vp-sidebar-sub-headers"></ul></li><li class="vp-sidebar-sub-header"><a aria-label="小结" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#小结-3"><!---->小结<!----></a><ul class="vp-sidebar-sub-headers"></ul></li><li class="vp-sidebar-sub-header"><a aria-label="注意事项" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#注意事项-3"><!---->注意事项<!----></a><ul class="vp-sidebar-sub-headers"></ul></li></ul></li><li class="vp-sidebar-sub-header"><a aria-label="volatile-lfu" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#volatile-lfu"><!---->volatile-lfu<!----></a><ul class="vp-sidebar-sub-headers"><li class="vp-sidebar-sub-header"><a aria-label="适用场景" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#适用场景-4"><!---->适用场景<!----></a><ul class="vp-sidebar-sub-headers"></ul></li><li class="vp-sidebar-sub-header"><a aria-label="怎么用" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#怎么用-4"><!---->怎么用<!----></a><ul class="vp-sidebar-sub-headers"></ul></li><li class="vp-sidebar-sub-header"><a aria-label="小结" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#小结-4"><!---->小结<!----></a><ul class="vp-sidebar-sub-headers"></ul></li><li class="vp-sidebar-sub-header"><a aria-label="注意事项" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#注意事项-4"><!---->注意事项<!----></a><ul class="vp-sidebar-sub-headers"></ul></li></ul></li><li class="vp-sidebar-sub-header"><a aria-label="volatile-random" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#volatile-random"><!---->volatile-random<!----></a><ul class="vp-sidebar-sub-headers"><li class="vp-sidebar-sub-header"><a aria-label="适用场景" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#适用场景-5"><!---->适用场景<!----></a><ul class="vp-sidebar-sub-headers"></ul></li><li class="vp-sidebar-sub-header"><a aria-label="怎么用" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#怎么用-5"><!---->怎么用<!----></a><ul class="vp-sidebar-sub-headers"></ul></li><li class="vp-sidebar-sub-header"><a aria-label="小结" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#小结-5"><!---->小结<!----></a><ul class="vp-sidebar-sub-headers"></ul></li><li class="vp-sidebar-sub-header"><a aria-label="注意事项" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#注意事项-5"><!---->注意事项<!----></a><ul class="vp-sidebar-sub-headers"></ul></li></ul></li><li class="vp-sidebar-sub-header"><a aria-label="allkeys-random" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#allkeys-random"><!---->allkeys-random<!----></a><ul class="vp-sidebar-sub-headers"><li class="vp-sidebar-sub-header"><a aria-label="适用场景" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#适用场景-6"><!---->适用场景<!----></a><ul class="vp-sidebar-sub-headers"></ul></li><li class="vp-sidebar-sub-header"><a aria-label="怎么用" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#怎么用-6"><!---->怎么用<!----></a><ul class="vp-sidebar-sub-headers"></ul></li><li class="vp-sidebar-sub-header"><a aria-label="小结" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#小结-6"><!---->小结<!----></a><ul class="vp-sidebar-sub-headers"></ul></li><li class="vp-sidebar-sub-header"><a aria-label="注意事项" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#注意事项-6"><!---->注意事项<!----></a><ul class="vp-sidebar-sub-headers"></ul></li></ul></li><li class="vp-sidebar-sub-header"><a aria-label="volatile-ttl" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#volatile-ttl"><!---->volatile-ttl<!----></a><ul class="vp-sidebar-sub-headers"><li class="vp-sidebar-sub-header"><a aria-label="适用场景" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#适用场景-7"><!---->适用场景<!----></a><ul class="vp-sidebar-sub-headers"></ul></li><li class="vp-sidebar-sub-header"><a aria-label="怎么用" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#怎么用-7"><!---->怎么用<!----></a><ul class="vp-sidebar-sub-headers"></ul></li><li class="vp-sidebar-sub-header"><a aria-label="小结" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#小结-7"><!---->小结<!----></a><ul class="vp-sidebar-sub-headers"></ul></li><li class="vp-sidebar-sub-header"><a aria-label="注意事项" class="vp-link nav-link vp-sidebar-link vp-heading nav-link vp-sidebar-link vp-heading" href="/backend/redis/%E5%86%85%E5%AD%98%E6%B7%98%E6%B1%B0%E7%AD%96%E7%95%A5.html#注意事项-7"><!---->注意事项<!----></a><ul class="vp-sidebar-sub-headers"></ul></li></ul></li></ul><!--]--></li><li><!--[--><a aria-label="Gossip协议" class="vp-link nav-link vp-sidebar-link vp-sidebar-page nav-link vp-sidebar-link vp-sidebar-page" href="/backend/redis/Gossip%E5%8D%8F%E8%AE%AE.html"><!---->Gossip协议<!----></a><ul class="vp-sidebar-sub-headers"></ul><!--]--></li></ul></section></li><li><section class="vp-sidebar-group"><button class="vp-sidebar-heading clickable" type="button"><span class="font-icon icon iconfont icon-Spring" style=""></span><span class="vp-sidebar-title">Spring</span><span class="vp-arrow end"></span></button><!----></section></li><li><section class="vp-sidebar-group"><button class="vp-sidebar-heading clickable" type="button"><span class="font-icon icon iconfont icon-a-icons8-mybatis2" style=""></span><span class="vp-sidebar-title">MyBatis</span><span class="vp-arrow end"></span></button><!----></section></li><li><section class="vp-sidebar-group"><button class="vp-sidebar-heading clickable" type="button"><span class="font-icon icon iconfont icon-xxl-job" style=""></span><span class="vp-sidebar-title">XXL-JOB</span><span class="vp-arrow end"></span></button><!----></section></li><li><section class="vp-sidebar-group"><button class="vp-sidebar-heading clickable" type="button"><span class="font-icon icon iconfont icon-RocketMQ" style=""></span><span class="vp-sidebar-title">RocketMQ 4.6.0</span><span class="vp-arrow end"></span></button><!----></section></li><li><section class="vp-sidebar-group"><button class="vp-sidebar-heading clickable" type="button"><span class="font-icon icon iconfont icon-Netty" style=""></span><span class="vp-sidebar-title">Netty</span><span class="vp-arrow end"></span></button><!----></section></li><li><section class="vp-sidebar-group"><button class="vp-sidebar-heading clickable" type="button"><span class="font-icon icon iconfont icon-tools" style=""></span><span class="vp-sidebar-title">工具安装教程</span><span class="vp-arrow end"></span></button><!----></section></li></ul><!--[--><!----><!--]--></aside><!--[--><main id="main-content" class="vp-page"><!--[--><!--[--><!----><!--]--><!----><nav class="vp-breadcrumb disable"></nav><div class="vp-page-title"><h1><!---->内存淘汰策略</h1><div class="page-info"><span class="page-author-info" aria-label="作者🖊" data-balloon-pos="down"><svg xmlns="http://www.w3.org/2000/svg" class="icon author-icon" viewBox="0 0 1024 1024" fill="currentColor" aria-label="author icon"><path d="M649.6 633.6c86.4-48 147.2-144 147.2-249.6 0-160-128-288-288-288s-288 128-288 288c0 108.8 57.6 201.6 147.2 249.6-121.6 48-214.4 153.6-240 288-3.2 9.6 0 19.2 6.4 25.6 3.2 9.6 12.8 12.8 22.4 12.8h704c9.6 0 19.2-3.2 25.6-12.8 6.4-6.4 9.6-16 6.4-25.6-25.6-134.4-121.6-240-243.2-288z"></path></svg><span><span class="page-author-item">小刘Learning</span></span><span property="author" content="小刘Learning"></span></span><!----><span class="page-date-info" aria-label="写作日期📅" data-balloon-pos="down"><svg xmlns="http://www.w3.org/2000/svg" class="icon calendar-icon" viewBox="0 0 1024 1024" fill="currentColor" aria-label="calendar icon"><path d="M716.4 110.137c0-18.753-14.72-33.473-33.472-33.473-18.753 0-33.473 14.72-33.473 33.473v33.473h66.993v-33.473zm-334.87 0c0-18.753-14.72-33.473-33.473-33.473s-33.52 14.72-33.52 33.473v33.473h66.993v-33.473zm468.81 33.52H716.4v100.465c0 18.753-14.72 33.473-33.472 33.473a33.145 33.145 0 01-33.473-33.473V143.657H381.53v100.465c0 18.753-14.72 33.473-33.473 33.473a33.145 33.145 0 01-33.473-33.473V143.657H180.6A134.314 134.314 0 0046.66 277.595v535.756A134.314 134.314 0 00180.6 947.289h669.74a134.36 134.36 0 00133.94-133.938V277.595a134.314 134.314 0 00-133.94-133.938zm33.473 267.877H147.126a33.145 33.145 0 01-33.473-33.473c0-18.752 14.72-33.473 33.473-33.473h736.687c18.752 0 33.472 14.72 33.472 33.473a33.145 33.145 0 01-33.472 33.473z"></path></svg><span><!----></span><meta property="datePublished" content="2024-10-18T02:35:48.000Z"></span><!----><span class="page-reading-time-info" aria-label="阅读时间⌛" data-balloon-pos="down"><svg xmlns="http://www.w3.org/2000/svg" class="icon timer-icon" viewBox="0 0 1024 1024" fill="currentColor" aria-label="timer icon"><path d="M799.387 122.15c4.402-2.978 7.38-7.897 7.38-13.463v-1.165c0-8.933-7.38-16.312-16.312-16.312H256.33c-8.933 0-16.311 7.38-16.311 16.312v1.165c0 5.825 2.977 10.874 7.637 13.592 4.143 194.44 97.22 354.963 220.201 392.763-122.204 37.542-214.893 196.511-220.2 389.397-4.661 5.049-7.638 11.651-7.638 19.03v5.825h566.49v-5.825c0-7.379-2.849-13.981-7.509-18.9-5.049-193.016-97.867-351.985-220.2-389.527 123.24-37.67 216.446-198.453 220.588-392.892zM531.16 450.445v352.632c117.674 1.553 211.787 40.778 211.787 88.676H304.097c0-48.286 95.149-87.382 213.728-88.676V450.445c-93.077-3.107-167.901-81.297-167.901-177.093 0-8.803 6.99-15.793 15.793-15.793 8.803 0 15.794 6.99 15.794 15.793 0 80.261 63.69 145.635 142.01 145.635s142.011-65.374 142.011-145.635c0-8.803 6.99-15.793 15.794-15.793s15.793 6.99 15.793 15.793c0 95.019-73.789 172.82-165.96 177.093z"></path></svg><span>大约 25 分钟</span><meta property="timeRequired" content="PT25M"></span><!----><!----></div><hr></div><div class="toc-place-holder"><aside id="toc"><!--[--><!----><!--]--><div class="toc-header">此页内容<button type="button" class="print-button" title="打印"><svg xmlns="http://www.w3.org/2000/svg" class="icon print-icon" viewBox="0 0 1024 1024" fill="currentColor" aria-label="print icon"><path d="M819.2 364.8h-44.8V128c0-17.067-14.933-32-32-32H281.6c-17.067 0-32 14.933-32 32v236.8h-44.8C145.067 364.8 96 413.867 96 473.6v192c0 59.733 49.067 108.8 108.8 108.8h44.8V896c0 17.067 14.933 32 32 32h460.8c17.067 0 32-14.933 32-32V774.4h44.8c59.733 0 108.8-49.067 108.8-108.8v-192c0-59.733-49.067-108.8-108.8-108.8zM313.6 160h396.8v204.8H313.6V160zm396.8 704H313.6V620.8h396.8V864zM864 665.6c0 25.6-19.2 44.8-44.8 44.8h-44.8V588.8c0-17.067-14.933-32-32-32H281.6c-17.067 0-32 14.933-32 32v121.6h-44.8c-25.6 0-44.8-19.2-44.8-44.8v-192c0-25.6 19.2-44.8 44.8-44.8h614.4c25.6 0 44.8 19.2 44.8 44.8v192z"></path></svg></button></div><div class="toc-wrapper"><ul class="toc-list"><!--[--><li class="toc-item"><a class="vp-link toc-link level2 toc-link level2" href="#概述">概述</a></li><!----><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level2 toc-link level2" href="#noeviction">noeviction</a></li><li><ul class="toc-list"><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#适用场景">适用场景</a></li><!----><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#怎么用">怎么用</a></li><!----><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#小结">小结</a></li><!----><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#注意事项">注意事项</a></li><!----><!--]--></ul></li><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level2 toc-link level2" href="#allkeys-lru">allkeys-lru</a></li><li><ul class="toc-list"><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#适用场景-1">适用场景</a></li><!----><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#怎么用-1">怎么用</a></li><!----><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#小结-1">小结</a></li><!----><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#注意事项-1">注意事项</a></li><!----><!--]--></ul></li><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level2 toc-link level2" href="#allkeys-lfu">allkeys-lfu</a></li><li><ul class="toc-list"><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#适用场景-2">适用场景</a></li><!----><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#怎么用-2">怎么用</a></li><!----><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#小结-2">小结</a></li><!----><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#注意事项-2">注意事项</a></li><!----><!--]--></ul></li><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level2 toc-link level2" href="#volatile-lru">volatile-lru</a></li><li><ul class="toc-list"><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#适用场景-3">适用场景</a></li><!----><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#怎么用-3">怎么用</a></li><!----><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#小结-3">小结</a></li><!----><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#注意事项-3">注意事项</a></li><!----><!--]--></ul></li><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level2 toc-link level2" href="#volatile-lfu">volatile-lfu</a></li><li><ul class="toc-list"><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#适用场景-4">适用场景</a></li><!----><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#怎么用-4">怎么用</a></li><!----><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#小结-4">小结</a></li><!----><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#注意事项-4">注意事项</a></li><!----><!--]--></ul></li><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level2 toc-link level2" href="#volatile-random">volatile-random</a></li><li><ul class="toc-list"><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#适用场景-5">适用场景</a></li><!----><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#怎么用-5">怎么用</a></li><!----><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#小结-5">小结</a></li><!----><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#注意事项-5">注意事项</a></li><!----><!--]--></ul></li><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level2 toc-link level2" href="#allkeys-random">allkeys-random</a></li><li><ul class="toc-list"><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#适用场景-6">适用场景</a></li><!----><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#怎么用-6">怎么用</a></li><!----><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#小结-6">小结</a></li><!----><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#注意事项-6">注意事项</a></li><!----><!--]--></ul></li><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level2 toc-link level2" href="#volatile-ttl">volatile-ttl</a></li><li><ul class="toc-list"><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#适用场景-7">适用场景</a></li><!----><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#怎么用-7">怎么用</a></li><!----><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#小结-7">小结</a></li><!----><!--]--><!--[--><li class="toc-item"><a class="vp-link toc-link level3 toc-link level3" href="#注意事项-7">注意事项</a></li><!----><!--]--></ul></li><!--]--></ul><div class="toc-marker" style="top:-1.7rem;"></div></div><!--[--><!----><!--]--></aside></div><!--[--><!----><!--]--><div class="theme-hope-content"><h2 id="概述" tabindex="-1"><a class="header-anchor" href="#概述" aria-hidden="true">#</a> 概述</h2><p>Redis 的内存淘汰策略是指当Redis的内存使用量达到设定的上限时，决定哪些数据应该被移除以便为新数据腾出空间的规则。Redis 提供了多种内存淘汰策略，可以通过配置文件中的 <code>maxmemory-policy</code> 指令来设置。以下是 Redis 支持的主要内存淘汰策略：</p><ol><li><strong>noeviction</strong>：这是默认策略，当内存使用达到限制时，Redis 会拒绝新的写入操作，并返回错误，但不会淘汰任何数据。</li><li><strong>allkeys-lru</strong>：在所有键中，基于最近最少使用（LRU）算法淘汰数据。Redis 会维护一个近似的 LRU 列表，并不保证完全精确，但是对大多数使用场景来说是足够的。</li><li><strong>allkeys-lfu</strong>：在所有键中，基于最少频率使用（LFU）算法淘汰数据。LFU 算法会跟踪每个键的访问频率，并淘汰访问频率最低的键。</li><li><strong>volatile-lru</strong>：仅在设置了过期时间的键中，基于 LRU 算法淘汰数据。</li><li><strong>volatile-lfu</strong>：仅在设置了过期时间的键中，基于 LFU 算法淘汰数据。</li><li><strong>volatile-random</strong>：在设置了过期时间的键中随机选择淘汰。</li><li><strong>allkeys-random</strong>：在所有键中随机选择淘汰。</li><li><strong>volatile-ttl</strong>：在设置了过期时间的键中，淘汰那些 TTL（Time To Live）值最小的键，也就是即将过期的键。</li></ol><p>以上是8种不同的淘汰策略，选择哪种淘汰策略取决于具体的使用场景和业务需求。例如，如果你希望 Redis 作为缓存使用，并且缓存的数据大多是临时性的，那么可能会选择 <code>allkeys-lru</code> 或 <code>volatile-lru</code>。如果你的应用中有明确的热点数据，可能会选择 <code>allkeys-lfu</code> 或 <code>volatile-lfu</code> 来确保热点数据不会被轻易淘汰。</p><p>Redis 还提供了一些工具和命令来帮助监控和优化内存使用，例如 <code>INFO memory</code> 命令可以查看内存使用情况，<code>CONFIG SET maxmemory</code> 可以动态调整内存上限。</p><p>在 Redis 4.0 版本后引入了 <code>MEMORY</code> 命令，可以更细致地管理和分析内存使用情况。例如，<code>MEMORY USAGE</code> 可以估算键值对的内存使用量，<code>MEMORY STATS</code> 可以显示内存使用的详细信息。</p><p>Redis 的内存淘汰是在后台异步进行的，因此即使达到了内存上限，也不会立即淘汰数据，而是在新的写入操作发生时根据配置的策略进行淘汰。</p><h2 id="noeviction" tabindex="-1"><a class="header-anchor" href="#noeviction" aria-hidden="true">#</a> noeviction</h2><p><code>noeviction</code> 是 Redis 默认的内存淘汰策略。当 Redis 的内存使用量达到 <code>maxmemory</code> 配置的限制时，如果尝试执行可能导致更多内存使用的命令（如 SET、LPUSH、SADD 等），Redis 将返回错误，而不是淘汰任何现有的键值对。</p><h3 id="适用场景" tabindex="-1"><a class="header-anchor" href="#适用场景" aria-hidden="true">#</a> 适用场景</h3><ol><li><strong>数据保留</strong>：如果你的应用场景中，每个数据项都非常重要，不能丢失，那么 <code>noeviction</code> 策略可以确保即使在高内存使用的情况下，数据也不会被自动淘汰。</li><li><strong>内存充足的环境</strong>：如果你的服务器有足够的内存，或者 Redis 实例被限制在一个相对较小的数据集上，那么使用 <code>noeviction</code> 策略可以避免复杂的淘汰逻辑，简化内存管理。</li><li><strong>消息队列</strong>：在某些使用 Redis 作为消息队列的场景中，可能会希望确保所有消息都能被处理，而不是在内存压力下丢失消息。</li><li><strong>缓存预热</strong>：在缓存预热阶段，可能会希望保持缓存数据的完整性，直到缓存稳定后再根据实际访问模式进行淘汰。</li></ol><h3 id="怎么用" tabindex="-1"><a class="header-anchor" href="#怎么用" aria-hidden="true">#</a> 怎么用</h3><ol><li><strong>配置文件设置</strong>：在 Redis 配置文件 <code>redis.conf</code> 中，可以通过设置 <code>maxmemory-policy noeviction</code> 来启用 <code>noeviction</code> 策略。</li></ol><div class="language-cmake line-numbers-mode" data-ext="cmake"><pre class="language-cmake"><code> maxmemory-policy noeviction
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ol><li><strong>运行时设置</strong>：也可以在 Redis 运行时使用 <code>CONFIG SET</code> 命令来动态更改内存淘汰策略。</li></ol><div class="language-bash line-numbers-mode" data-ext="sh"><pre class="language-bash"><code><span class="token number">127.0</span>.0.1:637<span class="token operator"><span class="token file-descriptor important">9</span>&gt;</span> CONFIG SET maxmemory-policy noeviction
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ol><li><strong>命令行设置</strong>：如果你使用的是 Redis 命令行工具，也可以在启动 Redis 服务时通过命令行参数设置。</li></ol><div class="language-bash line-numbers-mode" data-ext="sh"><pre class="language-bash"><code>redis-server --maxmemory-policy noeviction
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h3 id="小结" tabindex="-1"><a class="header-anchor" href="#小结" aria-hidden="true">#</a> 小结</h3><ul><li>当设置为 <code>noeviction</code> 时，Redis 会记录内存使用量，但不会主动淘汰任何键值对。</li><li>如果内存使用量达到限制，Redis 会拒绝那些可能会增加内存使用的命令，并返回错误信息，如 <code>(error)OOM command not allowed when used memory&gt;&#39;maxmemory&#39;</code>。</li><li>这种策略下，只有当客户端显式地删除键值对或键值对过期时，内存才会被释放。</li><li>由于不自动淘汰数据，使用 <code>noeviction</code> 策略时需要更加谨慎地监控内存使用情况，并确保有足够的内存空间来处理数据的增长。</li></ul><h3 id="注意事项" tabindex="-1"><a class="header-anchor" href="#注意事项" aria-hidden="true">#</a> 注意事项</h3><ul><li>使用 <code>noeviction</code> 策略时，需要确保服务器有足够的内存来处理数据的增长，否则 Redis 可能会因为内存不足而无法处理新的写入请求。</li><li>在某些情况下，如果 Redis 长时间无法处理写入请求，可能会导致客户端操作超时或错误，影响应用程序的正常运行。</li><li>如果你的应用可以容忍数据的丢失，或者有其他机制来处理数据淘汰（如定期清理旧数据），那么可以考虑使用其他淘汰策略来更有效地管理内存。</li></ul><h2 id="allkeys-lru" tabindex="-1"><a class="header-anchor" href="#allkeys-lru" aria-hidden="true">#</a> allkeys-lru</h2><p><code>allkeys-lru</code> 是 Redis 的一种内存淘汰策略，全称为 &quot;all keys least recently used&quot;。这种策略会在所有键中，包括那些没有设置过期时间的键，基于最近最少使用算法（LRU）来淘汰数据。</p><h3 id="适用场景-1" tabindex="-1"><a class="header-anchor" href="#适用场景-1" aria-hidden="true">#</a> 适用场景</h3><ol><li><strong>缓存应用</strong>：在缓存场景中，通常需要保留最近被访问的数据，以便快速响应后续的读取请求。<code>allkeys-lru</code> 策略可以确保缓存中的数据是最近被访问的，从而提高缓存效率。</li><li><strong>数据访问模式均匀</strong>：如果你的应用中所有数据的访问模式相对均匀，没有特别明显的热点数据，那么 <code>allkeys-lru</code> 可以作为一个合理的选择，因为它会淘汰最不活跃的数据。</li><li><strong>数据替换</strong>：在某些应用中，可能需要定期替换旧数据以保持数据的新鲜度，<code>allkeys-lru</code> 策略可以帮助实现这一点。</li><li><strong>内存限制严格</strong>：在内存使用有严格限制的环境中，<code>allkeys-lru</code> 可以作为一种自动的数据淘汰机制，以确保内存使用不会超过设定的限制。</li></ol><h3 id="怎么用-1" tabindex="-1"><a class="header-anchor" href="#怎么用-1" aria-hidden="true">#</a> 怎么用</h3><ol><li><strong>配置文件设置</strong>：在 Redis 配置文件 <code>redis.conf</code> 中，可以通过设置 <code>maxmemory-policy allkeys-lru</code> 来启用 <code>allkeys-lru</code> 策略。</li></ol><div class="language-cmake line-numbers-mode" data-ext="cmake"><pre class="language-cmake"><code>maxmemory-policy allkeys-lru
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ol><li><strong>运行时设置</strong>：也可以在 Redis 运行时使用 <code>CONFIG SET</code> 命令来动态更改内存淘汰策略。</li></ol><div class="language-bash line-numbers-mode" data-ext="sh"><pre class="language-bash"><code><span class="token number">127.0</span>.0.1:637<span class="token operator"><span class="token file-descriptor important">9</span>&gt;</span> CONFIG SET maxmemory-policy allkeys-lru
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ol><li><strong>命令行设置</strong>：如果你使用的是 Redis 命令行工具，也可以在启动 Redis 服务时通过命令行参数设置。</li></ol><div class="language-bash line-numbers-mode" data-ext="sh"><pre class="language-bash"><code>redis-server --maxmemory-policy allkeys-lru
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h3 id="小结-1" tabindex="-1"><a class="header-anchor" href="#小结-1" aria-hidden="true">#</a> 小结</h3><ul><li><strong>LRU 算法</strong>：最近最少使用（LRU）是一种常见的页面置换算法，它基于这样一个假设：如果数据最近被访问过，那么将来被访问的几率也更高。LRU 算法会跟踪每个数据项的访问时间，并在需要淘汰数据时选择最久未被访问的数据。</li><li><strong>淘汰过程</strong>：当 Redis 的内存使用量达到 <code>maxmemory</code> 限制时，Redis 会根据 LRU 算法淘汰最久未被访问的键值对，直到内存使用量降到限制以下。</li><li><strong>近似实现</strong>：Redis 实现的 LRU 算法是一个近似版本，它通过定期检查一组随机键，并淘汰其中最久未被访问的键来工作。这样可以在不牺牲太多性能的情况下，近似地实现 LRU 算法。</li><li><strong>配置样本大小</strong>：Redis 允许你通过 <code>maxmemory-samples</code> 配置来调整用于淘汰决策的键样本大小。增加样本大小可以提高淘汰决策的准确性，但可能会增加 CPU 的使用率。</li></ul><h3 id="注意事项-1" tabindex="-1"><a class="header-anchor" href="#注意事项-1" aria-hidden="true">#</a> 注意事项</h3><ul><li><strong>数据丢失</strong>：使用 <code>allkeys-lru</code> 策略时，需要意识到一些最近没有被访问的数据可能会被自动淘汰，这可能导致数据丢失。</li><li><strong>性能考虑</strong>：虽然 LRU 算法可以提高缓存命中率，但 Redis 需要维护额外的访问时间信息，这可能会对性能产生一定影响。</li><li><strong>监控</strong>：建议监控 Redis 的内存使用情况和淘汰事件，以确保系统按预期工作，并及时调整策略或增加内存资源。</li><li><strong>业务适配</strong>：在决定使用 <code>allkeys-lru</code> 策略之前，应考虑业务需求和数据访问模式，确保该策略与业务目标一致。</li></ul><h2 id="allkeys-lfu" tabindex="-1"><a class="header-anchor" href="#allkeys-lfu" aria-hidden="true">#</a> allkeys-lfu</h2><p><code>allkeys-lfu</code> 是 Redis 的一种内存淘汰策略，全称为 &quot;all keys least frequently used&quot;。这种策略会在所有键中，包括那些没有设置过期时间的键，基于最少频率使用算法（LFU）来淘汰数据。</p><h3 id="适用场景-2" tabindex="-1"><a class="header-anchor" href="#适用场景-2" aria-hidden="true">#</a> 适用场景</h3><ol><li><strong>访问模式不均匀</strong>：在数据访问模式不均匀的情况下，某些键可能被频繁访问，而另一些键则很少被访问。<code>allkeys-lfu</code> 策略可以确保经常访问的键不会被轻易淘汰。</li><li><strong>热点数据保留</strong>：如果你的应用中有热点数据，即那些被频繁访问的数据，使用 <code>allkeys-lfu</code> 策略可以确保这些热点数据不会因为最近最少使用算法而被误淘汰。</li><li><strong>数据重要性</strong>：在某些应用中，数据的重要性与其被访问的频率成正比。使用 <code>allkeys-lfu</code> 策略可以保留那些被认为更重要的数据。</li><li><strong>避免数据抖动</strong>：在一些实时性要求高的应用中，如推荐系统或实时分析系统，使用 <code>allkeys-lfu</code> 策略可以减少因为数据被淘汰而导致的抖动。</li></ol><h3 id="怎么用-2" tabindex="-1"><a class="header-anchor" href="#怎么用-2" aria-hidden="true">#</a> 怎么用</h3><ol><li><strong>配置文件设置</strong>：在 Redis 配置文件 <code>redis.conf</code> 中，可以通过设置 <code>maxmemory-policy allkeys-lfu</code> 来启用 <code>allkeys-lfu</code> 策略。</li></ol><div class="language-cmake line-numbers-mode" data-ext="cmake"><pre class="language-cmake"><code>maxmemory-policy allkeys-lfu
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ol><li><strong>运行时设置</strong>：也可以在 Redis 运行时使用 <code>CONFIG SET</code> 命令来动态更改内存淘汰策略。</li></ol><div class="language-bash line-numbers-mode" data-ext="sh"><pre class="language-bash"><code><span class="token number">127.0</span>.0.1:637<span class="token operator"><span class="token file-descriptor important">9</span>&gt;</span> CONFIG SET maxmemory-policy allkeys-lfu
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ol><li><strong>命令行设置</strong>：如果你使用的是 Redis 命令行工具，也可以在启动 Redis 服务时通过命令行参数设置。</li></ol><div class="language-bash line-numbers-mode" data-ext="sh"><pre class="language-bash"><code>redis-server --maxmemory-policy allkeys-lfu
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h3 id="小结-2" tabindex="-1"><a class="header-anchor" href="#小结-2" aria-hidden="true">#</a> 小结</h3><ul><li><strong>LFU 算法</strong>：最少频率使用（LFU）是一种页面置换算法，它基于数据项的访问频率来淘汰数据。LFU 算法会跟踪每个数据项的访问次数，并在需要淘汰数据时选择访问次数最少的数据。</li><li><strong>淘汰过程</strong>：当 Redis 的内存使用量达到 <code>maxmemory</code> 限制时，Redis 会根据 LFU 算法淘汰访问次数最少的键值对，直到内存使用量降到限制以下。</li><li><strong>近似实现</strong>：Redis 实现的 LFU 算法是一个近似版本，它通过维护一个计数器来跟踪每个键的访问频率，并在需要淘汰数据时选择访问频率最低的键。</li><li><strong>配置频率衰减</strong>：Redis 允许通过 <code>lfu-decay-time</code> 配置项来设置访问频率的衰减时间，这有助于平衡最近访问频率和长期访问频率的重要性。</li></ul><h3 id="注意事项-2" tabindex="-1"><a class="header-anchor" href="#注意事项-2" aria-hidden="true">#</a> 注意事项</h3><ul><li><strong>数据淘汰</strong>：使用 <code>allkeys-lfu</code> 策略时，需要意识到那些访问频率较低的数据可能会被自动淘汰，这可能导致某些数据的丢失。</li><li><strong>性能考虑</strong>：虽然 LFU 算法可以保留重要的热点数据，但 Redis 需要维护额外的访问计数器，这可能会对性能产生一定影响。</li><li><strong>监控</strong>：建议监控 Redis 的内存使用情况和淘汰事件，以确保系统按预期工作，并及时调整策略或增加内存资源。</li><li><strong>业务适配</strong>：在决定使用 <code>allkeys-lfu</code> 策略之前，应考虑业务需求和数据访问模式，确保该策略与业务目标一致。</li><li><strong>算法精度</strong>：Redis 的 LFU 实现是一个近似算法，它通过定期检查一组随机键，并淘汰其中访问频率最低的键来工作。这样可以在不牺牲太多性能的情况下，近似地实现 LFU 算法。</li></ul><h2 id="volatile-lru" tabindex="-1"><a class="header-anchor" href="#volatile-lru" aria-hidden="true">#</a> volatile-lru</h2><p><code>volatile-lru</code> 是 Redis 的一种内存淘汰策略，全称为 &quot;volatile keys least recently used&quot;。这种策略仅针对设置了过期时间的键，基于最近最少使用算法（LRU）来淘汰数据。</p><h3 id="适用场景-3" tabindex="-1"><a class="header-anchor" href="#适用场景-3" aria-hidden="true">#</a> 适用场景</h3><ol><li><strong>缓存与过期数据</strong>：在缓存数据时，通常会为缓存项设置一个过期时间。<code>volatile-lru</code> 策略可以确保在内存不足时，最近最少被使用的过期键首先被移除。</li><li><strong>临时数据存储</strong>：对于需要临时存储的数据，如会话信息或临时计算结果，这些数据通常有明确的过期时间。使用 <code>volatile-lru</code> 策略可以有效地管理这些临时数据。</li><li><strong>热点数据保护</strong>：如果你希望保护那些没有设置过期时间的热点数据不被误淘汰，<code>volatile-lru</code> 策略可以确保只有那些即将过期的数据才会被考虑淘汰。</li><li><strong>数据时效性</strong>：在数据具有较强时效性的场景中，如新闻文章或实时数据，使用 <code>volatile-lru</code> 策略可以确保旧数据在内存不足时被优先淘汰。</li></ol><h3 id="怎么用-3" tabindex="-1"><a class="header-anchor" href="#怎么用-3" aria-hidden="true">#</a> 怎么用</h3><ol><li><strong>配置文件设置</strong>：在 Redis 配置文件 <code>redis.conf</code> 中，可以通过设置 <code>maxmemory-policy volatile-lru</code> 来启用 <code>volatile-lru</code> 策略。</li></ol><div class="language-pgsql line-numbers-mode" data-ext="pgsql"><pre class="language-pgsql"><code>maxmemory-policy volatile-lru
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ol><li><strong>运行时设置</strong>：也可以在 Redis 运行时使用 <code>CONFIG SET</code> 命令来动态更改内存淘汰策略。</li></ol><div class="language-bash line-numbers-mode" data-ext="sh"><pre class="language-bash"><code><span class="token number">127.0</span>.0.1:637<span class="token operator"><span class="token file-descriptor important">9</span>&gt;</span> CONFIG SET maxmemory-policy volatile-lru
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ol><li><strong>命令行设置</strong>：如果你使用的是 Redis 命令行工具，也可以在启动 Redis 服务时通过命令行参数设置。</li></ol><div class="language-bash line-numbers-mode" data-ext="sh"><pre class="language-bash"><code>redis-server --maxmemory-policy volatile-lru
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h3 id="小结-3" tabindex="-1"><a class="header-anchor" href="#小结-3" aria-hidden="true">#</a> 小结</h3><ul><li><strong>LRU 算法</strong>：最近最少使用（LRU）是一种常见的页面置换算法，它基于这样一个假设：如果数据最近被访问过，那么将来被访问的几率也更高。LRU 算法会跟踪每个数据项的访问时间，并在需要淘汰数据时选择最久未被访问的数据。</li><li><strong>淘汰过程</strong>：当 Redis 的内存使用量达到 <code>maxmemory</code> 限制时，Redis 会根据 LRU 算法淘汰最久未被访问的设置了过期时间的键值对，直到内存使用量降到限制以下。</li><li><strong>近似实现</strong>：Redis 实现的 LRU 算法是一个近似版本，它通过定期检查一组随机键，并淘汰其中最久未被访问的键来工作。这样可以在不牺牲太多性能的情况下，近似地实现 LRU 算法。</li><li><strong>配置样本大小</strong>：Redis 允许你通过 <code>maxmemory-samples</code> 配置来调整用于淘汰决策的键样本大小。增加样本大小可以提高淘汰决策的准确性，但可能会增加 CPU 的使用率。</li></ul><h3 id="注意事项-3" tabindex="-1"><a class="header-anchor" href="#注意事项-3" aria-hidden="true">#</a> 注意事项</h3><ul><li><strong>数据淘汰</strong>：使用 <code>volatile-lru</code> 策略时，需要意识到那些最近没有被访问且即将过期的数据可能会被自动淘汰，这可能导致数据丢失。</li><li><strong>性能考虑</strong>：虽然 LRU 算法可以提高缓存命中率，但 Redis 需要维护额外的访问时间信息，这可能会对性能产生一定影响。</li><li><strong>监控</strong>：建议监控 Redis 的内存使用情况和淘汰事件，以确保系统按预期工作，并及时调整策略或增加内存资源。</li><li><strong>业务适配</strong>：在决定使用 <code>volatile-lru</code> 策略之前，应考虑业务需求和数据访问模式，确保该策略与业务目标一致。</li><li><strong>数据保护</strong>：如果你的应用中有重要的数据没有设置过期时间，需要注意 <code>volatile-lru</code> 策略不会淘汰这些数据，从而可以保护这些数据不被误淘汰。</li></ul><h2 id="volatile-lfu" tabindex="-1"><a class="header-anchor" href="#volatile-lfu" aria-hidden="true">#</a> volatile-lfu</h2><p><code>volatile-lfu</code> 是 Redis 的一种内存淘汰策略，全称为 &quot;volatile keys least frequently used&quot;。这种策略仅针对设置了过期时间的键，基于最少频率使用算法（LFU）来淘汰数据。</p><h3 id="适用场景-4" tabindex="-1"><a class="header-anchor" href="#适用场景-4" aria-hidden="true">#</a> 适用场景</h3><ol><li><strong>缓存与频率限制</strong>：在缓存数据时，如果某些数据项被访问的频率非常低，即使它们最近被访问过，也可能不是很重要。<code>volatile-lfu</code> 策略可以确保这些不常访问的键被优先淘汰。</li><li><strong>临时数据存储</strong>：对于有明确过期时间的临时数据，如用户会话或缓存的API响应，<code>volatile-lfu</code> 策略可以在内存不足时，根据访问频率来淘汰这些临时数据。</li><li><strong>数据时效性与访问频率</strong>：在数据具有较强时效性且访问频率不均匀的场景中，<code>volatile-lfu</code> 策略可以结合时效性和访问频率来决定数据的保留优先级。</li><li><strong>热点数据与临时数据的平衡</strong>：如果你希望保护那些频繁访问的临时数据不被轻易淘汰，同时淘汰那些不常访问的临时数据，<code>volatile-lfu</code> 策略可以实现这种平衡。</li></ol><h3 id="怎么用-4" tabindex="-1"><a class="header-anchor" href="#怎么用-4" aria-hidden="true">#</a> 怎么用</h3><ol><li><strong>配置文件设置</strong>：在 Redis 配置文件 <code>redis.conf</code> 中，可以通过设置 <code>maxmemory-policy volatile-lfu</code> 来启用 <code>volatile-lfu</code> 策略。</li></ol><div class="language-pgsql line-numbers-mode" data-ext="pgsql"><pre class="language-pgsql"><code>maxmemory-policy volatile-lfu
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ol><li><strong>运行时设置</strong>：也可以在 Redis 运行时使用 <code>CONFIG SET</code> 命令来动态更改内存淘汰策略。</li></ol><div class="language-bash line-numbers-mode" data-ext="sh"><pre class="language-bash"><code><span class="token number">127.0</span>.0.1:637<span class="token operator"><span class="token file-descriptor important">9</span>&gt;</span> CONFIG SET maxmemory-policy volatile-lfu
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ol><li><strong>命令行设置</strong>：如果你使用的是 Redis 命令行工具，也可以在启动 Redis 服务时通过命令行参数设置。</li></ol><div class="language-bash line-numbers-mode" data-ext="sh"><pre class="language-bash"><code>redis-server --maxmemory-policy volatile-lfu
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h3 id="小结-4" tabindex="-1"><a class="header-anchor" href="#小结-4" aria-hidden="true">#</a> 小结</h3><ul><li><strong>LFU 算法</strong>：最少频率使用（LFU）是一种页面置换算法，它基于数据项的访问频率来淘汰数据。LFU 算法会跟踪每个数据项的访问次数，并在需要淘汰数据时选择访问次数最少的数据。</li><li><strong>淘汰过程</strong>：当 Redis 的内存使用量达到 <code>maxmemory</code> 限制时，Redis 会根据 LFU 算法淘汰设置了过期时间但访问次数最少的键值对，直到内存使用量降到限制以下。</li><li><strong>近似实现</strong>：Redis 实现的 LFU 算法是一个近似版本，它通过维护一个计数器来跟踪每个键的访问频率，并在需要淘汰数据时选择访问频率最低的键。</li><li><strong>配置频率衰减</strong>：Redis 允许通过 <code>lfu-decay-time</code> 配置项来设置访问频率的衰减时间，这有助于平衡最近访问频率和长期访问频率的重要性。</li></ul><h3 id="注意事项-4" tabindex="-1"><a class="header-anchor" href="#注意事项-4" aria-hidden="true">#</a> 注意事项</h3><ul><li><strong>数据淘汰</strong>：使用 <code>volatile-lfu</code> 策略时，需要意识到那些访问频率较低且即将过期的数据可能会被自动淘汰，这可能导致数据丢失。</li><li><strong>性能考虑</strong>：虽然 LFU 算法可以保留重要的热点数据，但 Redis 需要维护额外的访问计数器，这可能会对性能产生一定影响。</li><li><strong>监控</strong>：建议监控 Redis 的内存使用情况和淘汰事件，以确保系统按预期工作，并及时调整策略或增加内存资源。</li><li><strong>业务适配</strong>：在决定使用 <code>volatile-lfu</code> 策略之前，应考虑业务需求和数据访问模式，确保该策略与业务目标一致。</li><li><strong>算法精度</strong>：Redis 的 LFU 实现是一个近似算法，它通过定期检查一组随机键，并淘汰其中访问频率最低的键来工作。这样可以在不牺牲太多性能的情况下，近似地实现 LFU 算法。</li></ul><h2 id="volatile-random" tabindex="-1"><a class="header-anchor" href="#volatile-random" aria-hidden="true">#</a> volatile-random</h2><p><code>volatile-random</code> 是 Redis 的一种内存淘汰策略，全称为 &quot;volatile keys random&quot;。这种策略仅针对设置了过期时间的键，随机淘汰数据。</p><h3 id="适用场景-5" tabindex="-1"><a class="header-anchor" href="#适用场景-5" aria-hidden="true">#</a> 适用场景</h3><ol><li><strong>过期数据的不确定性</strong>：当你希望在内存不足时随机淘汰一些即将过期的数据，而不是基于访问模式或频率时，<code>volatile-random</code> 是一个合适的选择。</li><li><strong>简化的淘汰逻辑</strong>：如果你不需要复杂的淘汰逻辑，而只是希望在内存压力下随机释放一些空间，那么 <code>volatile-random</code> 策略可以满足需求。</li><li><strong>临时数据存储</strong>：对于存储临时数据的场景，如缓存的会话信息或临时计算结果，如果这些数据的丢失不会对系统造成重大影响，可以使用 <code>volatile-random</code> 策略。</li><li><strong>避免热点数据误伤</strong>：如果你希望避免基于访问模式淘汰数据，从而可能误伤热点数据，<code>volatile-random</code> 策略可以提供一个更为“公平”的淘汰机制。</li></ol><h3 id="怎么用-5" tabindex="-1"><a class="header-anchor" href="#怎么用-5" aria-hidden="true">#</a> 怎么用</h3><ol><li><strong>配置文件设置</strong>：在 Redis 配置文件 <code>redis.conf</code> 中，可以通过设置 <code>maxmemory-policy volatile-random</code> 来启用 <code>volatile-random</code> 策略。</li></ol><div class="language-arduino line-numbers-mode" data-ext="arduino"><pre class="language-arduino"><code>maxmemory<span class="token operator">-</span>policy volatile<span class="token operator">-</span><span class="token builtin">random</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ol><li><strong>运行时设置</strong>：也可以在 Redis 运行时使用 <code>CONFIG SET</code> 命令来动态更改内存淘汰策略。</li></ol><div class="language-bash line-numbers-mode" data-ext="sh"><pre class="language-bash"><code><span class="token number">127.0</span>.0.1:637<span class="token operator"><span class="token file-descriptor important">9</span>&gt;</span> CONFIG SET maxmemory-policy volatile-random
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ol><li><strong>命令行设置</strong>：如果你使用的是 Redis 命令行工具，也可以在启动 Redis 服务时通过命令行参数设置。</li></ol><div class="language-bash line-numbers-mode" data-ext="sh"><pre class="language-bash"><code>redis-server --maxmemory-policy volatile-random
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h3 id="小结-5" tabindex="-1"><a class="header-anchor" href="#小结-5" aria-hidden="true">#</a> 小结</h3><ul><li><strong>随机淘汰</strong>：<code>volatile-random</code> 策略会在达到内存限制时，从所有设置了过期时间的键中随机选择一些键进行淘汰。</li><li><strong>淘汰过程</strong>：Redis 会维护一个设置了过期时间的键的列表，当需要淘汰数据时，它会从这个列表中随机选择键来淘汰，直到内存使用量降到限制以下。</li><li><strong>简单且快速</strong>：这种策略的实现相对简单，不需要跟踪每个键的访问时间或频率，因此在执行淘汰操作时可以非常快速。</li><li><strong>公平性</strong>：由于淘汰是基于随机性的，因此这种策略在一定程度上可以认为是“公平”的，因为它不偏向于任何特定的数据。</li></ul><h3 id="注意事项-5" tabindex="-1"><a class="header-anchor" href="#注意事项-5" aria-hidden="true">#</a> 注意事项</h3><ul><li><strong>数据淘汰的不确定性</strong>：使用 <code>volatile-random</code> 策略时，任何设置了过期时间的数据都有可能被淘汰，这可能导致一些重要的数据被意外淘汰。</li><li><strong>性能考虑</strong>：虽然随机淘汰策略的实现简单且快速，但频繁的淘汰操作可能会对性能产生一定影响，尤其是在内存使用率较高时。</li><li><strong>监控</strong>：建议监控 Redis 的内存使用情况和淘汰事件，以确保系统按预期工作，并及时调整策略或增加内存资源。</li><li><strong>业务适配</strong>：在决定使用 <code>volatile-random</code> 策略之前，应考虑业务需求和数据的重要性，确保该策略与业务目标一致。</li><li><strong>数据保护</strong>：如果你的应用中有重要的数据设置了过期时间，需要注意 <code>volatile-random</code> 策略可能会淘汰这些数据，从而需要考虑额外的数据保护措施。</li></ul><h2 id="allkeys-random" tabindex="-1"><a class="header-anchor" href="#allkeys-random" aria-hidden="true">#</a> allkeys-random</h2><p><code>allkeys-random</code> 是 Redis 的一种内存淘汰策略，全称为 &quot;all keys random&quot;。这种策略会在所有键中，无论是否设置了过期时间，随机淘汰数据。</p><h3 id="适用场景-6" tabindex="-1"><a class="header-anchor" href="#适用场景-6" aria-hidden="true">#</a> 适用场景</h3><ol><li><strong>无差别数据</strong>：如果你的缓存数据没有明显的访问模式差异，即所有数据的访问频率和重要性都差不多，那么 <code>allkeys-random</code> 可以作为一个简单的淘汰策略。</li><li><strong>负载均衡</strong>：在分布式缓存环境中，如果所有节点的内存容量都接近上限，使用 <code>allkeys-random</code> 策略可以确保淘汰操作在各个节点之间相对均衡。</li><li><strong>非关键数据</strong>：如果你缓存的数据是非关键数据，即使部分数据被随机淘汰也不会对业务造成显著影响，那么这种策略可以减少系统的复杂性。</li><li><strong>临时解决方案</strong>：在紧急情况下，如内存泄漏或其他问题导致内存压力突然增大，<code>allkeys-random</code> 可以作为一个快速反应的淘汰策略。</li></ol><h3 id="怎么用-6" tabindex="-1"><a class="header-anchor" href="#怎么用-6" aria-hidden="true">#</a> 怎么用</h3><ol><li><strong>配置文件设置</strong>：在 Redis 配置文件 <code>redis.conf</code> 中，可以通过设置 <code>maxmemory-policy allkeys-random</code> 来启用 <code>allkeys-random</code> 策略。</li></ol><div class="language-arcade line-numbers-mode" data-ext="arcade"><pre class="language-arcade"><code>maxmemory-policy allkeys-random
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ol><li><strong>运行时设置</strong>：也可以在 Redis 运行时使用 <code>CONFIG SET</code> 命令来动态更改内存淘汰策略。</li></ol><div class="language-bash line-numbers-mode" data-ext="sh"><pre class="language-bash"><code><span class="token number">127.0</span>.0.1:637<span class="token operator"><span class="token file-descriptor important">9</span>&gt;</span> CONFIG SET maxmemory-policy allkeys-random
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ol><li><strong>命令行设置</strong>：如果你使用的是 Redis 命令行工具，也可以在启动 Redis 服务时通过命令行参数设置。</li></ol><div class="language-bash line-numbers-mode" data-ext="sh"><pre class="language-bash"><code>redis-server --maxmemory-policy allkeys-random
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h3 id="小结-6" tabindex="-1"><a class="header-anchor" href="#小结-6" aria-hidden="true">#</a> 小结</h3><ul><li><strong>随机淘汰</strong>：<code>allkeys-random</code> 策略会在达到内存限制时，从所有键中随机选择一些键进行淘汰。</li><li><strong>淘汰过程</strong>：Redis 会维护一个所有键的列表，当需要淘汰数据时，它会从这个列表中随机选择键来淘汰，直到内存使用量降到限制以下。</li><li><strong>简单且快速</strong>：这种策略的实现相对简单，不需要跟踪每个键的访问时间或频率，因此在执行淘汰操作时可以非常快速。</li><li><strong>公平性</strong>：由于淘汰是基于随机性的，因此这种策略在一定程度上可以认为是“公平”的，因为它不偏向于任何特定的数据。</li></ul><h3 id="注意事项-6" tabindex="-1"><a class="header-anchor" href="#注意事项-6" aria-hidden="true">#</a> 注意事项</h3><ul><li><strong>数据淘汰的不确定性</strong>：使用 <code>allkeys-random</code> 策略时，任何数据都有可能被淘汰，这可能导致一些重要的数据被意外淘汰。</li><li><strong>性能考虑</strong>：虽然随机淘汰策略的实现简单且快速，但频繁的淘汰操作可能会对性能产生一定影响，尤其是在内存使用率较高时。</li><li><strong>监控</strong>：建议监控 Redis 的内存使用情况和淘汰事件，以确保系统按预期工作，并及时调整策略或增加内存资源。</li><li><strong>业务适配</strong>：在决定使用 <code>allkeys-random</code> 策略之前，应考虑业务需求和数据的重要性，确保该策略与业务目标一致。</li><li><strong>数据保护</strong>：如果你的应用中有重要的数据，需要注意 <code>allkeys-random</code> 策略可能会淘汰这些数据，从而需要考虑额外的数据保护措施。</li></ul><h2 id="volatile-ttl" tabindex="-1"><a class="header-anchor" href="#volatile-ttl" aria-hidden="true">#</a> volatile-ttl</h2><p><code>volatile-ttl</code> 是 Redis 的一种内存淘汰策略，全称为 &quot;volatile keys with the smallest Time To Live&quot;。这种策略仅针对设置了过期时间的键，淘汰那些剩余生存时间（TTL）最短的键。</p><h3 id="适用场景-7" tabindex="-1"><a class="header-anchor" href="#适用场景-7" aria-hidden="true">#</a> 适用场景</h3><ol><li><strong>临时数据缓存</strong>：对于那些有明确过期时间的临时数据，如会话信息、定时任务结果等，<code>volatile-ttl</code> 策略可以确保这些数据在内存不足时按照 TTL 顺序被清除。</li><li><strong>数据时效性管理</strong>：在数据具有较强时效性的场景中，如新闻快讯或实时报价，<code>volatile-ttl</code> 策略可以确保最接近过期的数据首先被移除。</li><li><strong>过期数据优先淘汰</strong>：如果你希望在内存不足时优先淘汰那些即将过期的数据，而不是其他数据，<code>volatile-ttl</code> 提供了一种直接的方式来实现这一目标。</li><li><strong>内存优化</strong>：在内存资源有限的情况下，<code>volatile-ttl</code> 策略可以帮助优化内存使用，确保内存中的数据尽可能是有用的，即将过期的数据被及时清除。</li></ol><h3 id="怎么用-7" tabindex="-1"><a class="header-anchor" href="#怎么用-7" aria-hidden="true">#</a> 怎么用</h3><ol><li><strong>配置文件设置</strong>：在 Redis 配置文件 <code>redis.conf</code> 中，可以通过设置 <code>maxmemory-policy volatile-ttl</code> 来启用 <code>volatile-ttl</code> 策略。</li></ol><div class="language-pgsql line-numbers-mode" data-ext="pgsql"><pre class="language-pgsql"><code>maxmemory-policy volatile-ttl
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ol><li><strong>运行时设置</strong>：也可以在 Redis 运行时使用 <code>CONFIG SET</code> 命令来动态更改内存淘汰策略。</li></ol><div class="language-bash line-numbers-mode" data-ext="sh"><pre class="language-bash"><code><span class="token number">127.0</span>.0.1:637<span class="token operator"><span class="token file-descriptor important">9</span>&gt;</span> CONFIG SET maxmemory-policy volatile-ttl
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ol><li><strong>命令行设置</strong>：如果你使用的是 Redis 命令行工具，也可以在启动 Redis 服务时通过命令行参数设置。</li></ol><div class="language-bash line-numbers-mode" data-ext="sh"><pre class="language-bash"><code>redis-server --maxmemory-policy volatile-ttl
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h3 id="小结-7" tabindex="-1"><a class="header-anchor" href="#小结-7" aria-hidden="true">#</a> 小结</h3><ul><li><strong>TTL 淘汰</strong>：<code>volatile-ttl</code> 策略会根据键的剩余生存时间来淘汰数据。Redis 会跟踪每个设置了过期时间的键的 TTL，并在需要淘汰数据时选择 TTL 最短的键。</li><li><strong>淘汰过程</strong>：当 Redis 的内存使用量达到 <code>maxmemory</code> 限制时，Redis 会查找所有设置了过期时间的键，并淘汰那些 TTL 最短的键，直到内存使用量降到限制以下。</li><li><strong>实时性</strong>：这种策略可以确保内存中的数据尽可能是最新的，因为它倾向于淘汰那些即将过期的数据。</li><li><strong>配置样本大小</strong>：虽然 <code>volatile-ttl</code> 策略不涉及 <code>maxmemory-samples</code> 的配置，但它仍然需要定期检查键的 TTL，以便做出淘汰决策。</li></ul><h3 id="注意事项-7" tabindex="-1"><a class="header-anchor" href="#注意事项-7" aria-hidden="true">#</a> 注意事项</h3><ul><li><strong>数据淘汰的不确定性</strong>：使用 <code>volatile-ttl</code> 策略时，需要注意即使某些数据的 TTL 很短，它们也可能在内存不足时被保留，这取决于其他键的 TTL 值。</li><li><strong>性能考虑</strong>：虽然 TTL 淘汰策略的实现相对简单，但频繁的淘汰操作可能会对性能产生一定影响，尤其是在内存使用率较高时。</li><li><strong>监控</strong>：建议监控 Redis 的内存使用情况和淘汰事件，以确保系统按预期工作，并及时调整策略或增加内存资源。</li><li><strong>业务适配</strong>：在决定使用 <code>volatile-ttl</code> 策略之前，应考虑业务需求和数据的时效性，确保该策略与业务目标一致。</li><li><strong>数据保护</strong>：如果你的应用中有重要的数据设置了过期时间，需要注意 <code>volatile-ttl</code> 策略可能会淘汰这些数据，从而需要考虑额外的数据保护措施。</li></ul></div><!--[--><!----><!--]--><footer class="page-meta"><div class="meta-item edit-link"><a href="https://github.com/eddie-lucas/edit/main/src/backend/redis/内存淘汰策略.md" rel="noopener noreferrer" target="_blank" aria-label="编辑此页" class="nav-link label"><!--[--><svg xmlns="http://www.w3.org/2000/svg" class="icon edit-icon" viewBox="0 0 1024 1024" fill="currentColor" aria-label="edit icon"><path d="M430.818 653.65a60.46 60.46 0 0 1-50.96-93.281l71.69-114.012 7.773-10.365L816.038 80.138A60.46 60.46 0 0 1 859.225 62a60.46 60.46 0 0 1 43.186 18.138l43.186 43.186a60.46 60.46 0 0 1 0 86.373L588.879 565.55l-8.637 8.637-117.466 68.234a60.46 60.46 0 0 1-31.958 11.229z"></path><path d="M728.802 962H252.891A190.883 190.883 0 0 1 62.008 771.98V296.934a190.883 190.883 0 0 1 190.883-192.61h267.754a60.46 60.46 0 0 1 0 120.92H252.891a69.962 69.962 0 0 0-69.098 69.099V771.98a69.962 69.962 0 0 0 69.098 69.098h475.911A69.962 69.962 0 0 0 797.9 771.98V503.363a60.46 60.46 0 1 1 120.922 0V771.98A190.883 190.883 0 0 1 728.802 962z"></path></svg><!--]-->编辑此页<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span><!----></a></div><div class="meta-item git-info"><div class="update-time"><span class="label">上次编辑于: </span><!----></div><div class="contributors"><span class="label">贡献者: </span><!--[--><!--[--><span class="contributor" title="email: 761404955@qq.com">Lucas</span><!--]--><!--]--></div></div></footer><nav class="vp-page-nav"><a aria-label="主从复制原理" class="vp-link nav-link prev nav-link prev" href="/backend/redis/%E4%B8%BB%E4%BB%8E%E5%A4%8D%E5%88%B6%E5%8E%9F%E7%90%86.html"><div class="hint"><span class="arrow start"></span>上一页</div><div class="link"><!---->主从复制原理</div></a><a aria-label="Gossip协议" class="vp-link nav-link next nav-link next" href="/backend/redis/Gossip%E5%8D%8F%E8%AE%AE.html"><div class="hint">下一页<span class="arrow end"></span></div><div class="link">Gossip协议<!----></div></a></nav><div id="comment" class="giscus-wrapper input-top" style="display:none;"><div class="loading-icon-wrapper" style="display:flex;align-items:center;justify-content:center;height:96px"><svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" preserveAspectRatio="xMidYMid" viewBox="25 25 50 50"><animateTransform attributeName="transform" type="rotate" dur="2s" keyTimes="0;1" repeatCount="indefinite" values="0;360"></animateTransform><circle cx="50" cy="50" r="20" fill="none" stroke="currentColor" stroke-width="4" stroke-linecap="round"><animate attributeName="stroke-dasharray" dur="1.5s" keyTimes="0;0.5;1" repeatCount="indefinite" values="1,200;90,200;1,200"></animate><animate attributeName="stroke-dashoffset" dur="1.5s" keyTimes="0;0.5;1" repeatCount="indefinite" values="0;-35px;-125px"></animate></circle></svg></div></div><!--[--><!----><!--]--><!--]--></main><!--]--><footer class="vp-footer-wrapper"><div class="vp-footer">记录，分享自己的学习过程.....</div><div class="vp-copyright">Copyright © 2025 小刘Learning</div></footer></div><!--]--><!--]--><!----><!----><!--]--></div>
    <script type="module" src="/assets/app-d83e1369.js" defer></script>
  </body>
</html>
